GtkButton: Don't leak the gesture
authorMatthias Clasen <mclasen@redhat.com>
Fri, 2 May 2014 00:58:13 +0000 (20:58 -0400)
committerCarlos Garnacho <carlosg@gnome.org>
Fri, 23 May 2014 17:54:28 +0000 (19:54 +0200)
gtk/gtkbutton.c

index 7b8da5c4040273ef72f6ae9a88b6bef9e32c78f4..41db02427a1947120ee42bbf0d6a177f7bff3663 100644 (file)
@@ -648,8 +648,7 @@ gtk_button_init (GtkButton *button)
   gtk_gesture_single_set_button (GTK_GESTURE_SINGLE (priv->gesture), GDK_BUTTON_PRIMARY);
   g_signal_connect (priv->gesture, "begin", G_CALLBACK (gesture_begin_cb), button);
   g_signal_connect (priv->gesture, "end", G_CALLBACK (gesture_end_cb), button);
-  gtk_widget_add_controller (GTK_WIDGET (button),
-                             GTK_EVENT_CONTROLLER (priv->gesture));
+  gtk_widget_add_controller (GTK_WIDGET (button), GTK_EVENT_CONTROLLER (priv->gesture));
 }
 
 static void
@@ -664,6 +663,13 @@ gtk_button_destroy (GtkWidget *widget)
       priv->label_text = NULL;
     }
 
+  if (priv->gesture)
+    {
+      gtk_widget_remove_controller (widget, GTK_EVENT_CONTROLLER (priv->gesture));
+      g_object_unref (priv->gesture);
+      priv->gesture = NULL;
+    }
+
   GTK_WIDGET_CLASS (gtk_button_parent_class)->destroy (widget);
 }